Внешний курс. Раздел 2

Артём Дмитриевич Петлин

Российский университет дружбы народов

2025-11-21

Информация

Докладчик

Цель работы

Цель работы

Выполнить второй раздел внешнего курса “Системный администратор Linux с нуля”.

Задание

Задание

Задания четвертого, пятого, шестого и седьмого модулей, а также тесты.

Теоретическое введение

Теоретическое введение

  • Модуль 4. Получение справки. Использование справочных систем, работа с текстовыми файлами и логами
  • Модуль 5. Управление пользователями и группами
  • Модуль 6. Управление доступом
  • Модуль 7. Управление процессами

Выполнение практических заданий

Ход работы

Рисунок 1: модуль 4

Используес man чтобы узнать, как работает команда grep.

Ход работы

Рисунок 2: модуль 4

Находим документацию о systemctl с помощью info.

Ход работы

Рисунок 3: модуль 4

Откройте локальную документацию о info.

Ход работы

Открываем файл /etc/os-release с помощью less и находим название дистрибутива.

Рисунок 4: модуль 4

Ход работы

Рисунок 5: модуль 4

Исопльзуем grep, чтобы найти строки, содержащие «error» в файле /var/log/syslog.

Ход работы

Рисунок 6: модуль 4

Отредактируем конфигурацию SSH с помощью nano или vim и изменяем параметр PermitRootLogin no.

Ход работы

Рисунок 7: модуль 4

Создаем небольшой файл с матрицей чисел произвольного размера, и поэкспериментируем с числами при помощи утилиты awk — например, посчитаем сумму чисел в каждой четной строке.

Ход работы

Рисунок 8: модуль 4

Находим все ошибки в системном журнале за последний день.

Ход работы

Рисунок 9: модуль 4

Проверяем логи SSH и находим неудачные попытки входа.

Ход работы

Рисунок 10: модуль 4

Пишем скрипт, который ежедневно сохраняет в файл все ошибки из /var/log/syslog.

Ход работы

Рисунок 11: модуль 4

Натстраиваем cron, чтобы скрипт выполнялся раз в день.

Ход работы

Рисунок 12: модуль 4

Используем grep, чтобы посчитать количество неудачных попыток входа за последние 24 часа.

Ход работы

Создаем нового пользователя ivan и задаем ему пароль.

Рисунок 13: модуль 5

Ход работы

Создаем новую группу developers. Добавляем пользователя ivan в группу developers. Создаем группу testers и меняем принадлежность пользователя ivan группам c developers на testers. Удаляем учетную запись пользователя ivan вместе с его домашним каталогом.

Рисунок 14: модуль 5

Ход работы

Рисунок 15: модуль 5

Создаем где‑нибудь новый файл. Изучаем разрешения, которые он получил автоматически. Имеют именно такие значения из-за umask.

Ход работы

Для созданного файла убераем права на запись для группы и на чтение для всех остальных. Возвращаем первоначальные доступы файлу, используя числовую форму.

Рисунок 16: модуль 5

Ход работы

Рисунок 17: модуль 5

Делаем владельцем файла пользователя root.

Ход работы

Рисунок 18: модуль 5

Возвращаем себе владение файлом.

Ход работы

Рисунок 19: модуль 5

Выполняем несколько действий, используя sudo, и находим их в системном журнале.

Ход работы

Рисунок 20: модуль 5

Пользуемся учетной записью ivan из предыдущих уроков. Проверяем, может ли он выполнять команды суперпользователя. Если нет, предоставляем ему такую возможность.

Ход работы

Выводим имена всех пользователей, у которых в качестве алгоритма хеширования пароля указан устаревший SHA-512 (его префикс \(6\)).

Рисунок 21: модуль 5

Ход работы

Рисунок 22: модуль 5

Создаем пользователя ivan. Устанавливаем для него нужные параметры политики паролей с помощью команды chage. Блокируем вход пользователю ivan.

Ход работы

Рисунок 23: модуль 5

Убеждаемся, что он не может войти в систему.

Ход работы

Рисунок 24: модуль 5

Возрвращаем пользователю ivan возможность авторизоваться.

Ход работы

Рисунок 25: модуль 6

Проверяем права доступа к /etc/passwd, /home и /var/log.

Ход работы

Создаем файл в домашнем каталоге, проверяем его права и настройте umask, чтобы у новых файлов не было прав для категории остальных пользователей.

Рисунок 26: модуль 6

Ход работы

Создаем файл и настройте ему права 644, чтобы владелец мог редактировать, а остальные — только читать. Создаем группу admins, меняем группу у созданного файла в первом задании на эту и передаем группе право на изменение (запись).

Рисунок 27: модуль 6

Ход работы

Разрешаем конкретному пользователю изменять файл, не добавляя его в основную группу владельца. Утсанавливаем особые права для группы, чтобы она могла только выполнять файл. Проверяем и сбрасываем все ACL с файла.

Рисунок 28: модуль 6

Ход работы

Устанавливаем SUID на исполняемый файл, чтобы он запускался от имени владельца. Настраиваем SGID для каталога, чтобы новые файлы наследовали группу. Делаем так, чтобы категория других пользователей могли записывать в /public_folder, но не могли удалять чужие файлы.

Рисунок 29: модуль 6

Ход работы

Рисунок 30: модуль 7

Находим процесс, потребляющий больше всего памяти и завершаем его.

Ход работы

Рисунок 31: модуль 7

Запускаем процесс в фоновом режиме, возвращаем его на передний план, приостанавливаем процесс, затем возвращаем в фон.

Ход работы

Устанавилваем и запускаем htop, настраиваем нужные вам колонки, находим по фильтру процесс и «убиваем его».

Рисунок 32: модуль 7
Рисунок 33: модуль 7

Ход работы

Запускаем задачу у низким приоритетом — например, с nice=15. Находим PID процесса, который запускали ранее, и повышаем приоритет до -5. Находим процесс с самым низким приоритетом и пробуем повысить приоритет данного процесса.

Рисунок 34: модуль 7

Ход работы

Выводим список всех активных сервисов и фильтруем их по фильтру «Network». Определяем, какой веб-сервер установлен, проверяем статус сервиса и перезапускаем его. После перезапуска проверяем журнал на наличие ошибок.

Рисунок 35: модуль 7

Ход работы

Находим ненужный сервис. Делаем так, чтобы при перезапуске системы данный процесс не запускался. Перезагружаем устройство, на котором работаете, и проверяем, что выбранный сервис выключен.

Рисунок 36: модуль 7

Ход работы

Рисунок 37: модуль 7

Создаем простой Python-скрипт и даем данному файлу права на запуск.

Ход работы

Создаем unit-файл — активируем и проверяем статус вашего юнита.

Рисунок 38: модуль 7

Ход работы

Рисунок 39: модуль 7

Принудительно завершаем процесс, который был запущен в предыдущем задании, и проверяем статус сервиса.

Ход работы

Рисунок 40: модуль 7

Перезагружаем устройство, на котором работаем, и проверяем, сработал ли автозапуск вашего процесса.

Выполнение тестовых заданий

Тестовые задания

Когда нам нужно получить полное и структурированное описание утилиты, ее опций и примеров использования, мы обращаемся к встроенному справочнику с помощью команды man Мы используем команду info как альтернативу man для просмотра более подробной документации. Мы знаем, что после установки пакета его дополнительная документация, лицензии и примеры конфигураций обычно размещаются в каталоге /usr/share/doc/имя_пакета.

Рисунок 41: тест

Тестовые задания

Мы используем конструкцию cat > файл.txt для перенаправления стандартного ввода в новый файл. Мы применяем оператор >>, когда нужно добавить данные в конец существующего файла, не стирая его предыдущее содержимое. Оператор > всегда создает файл заново или полностью перезаписывает существующий. Для просмотра больших файлов мы предпочитаем использовать less, так как он позволяет нам листать содержимое страницами, искать по тексту и свободно перемещаться по файлу, в то время как cat вываливает всё содержимое сразу, что неудобно для навигации.

Рисунок 42: тест

Тестовые задания

Для выхода из просмотрщика less мы просто нажимаем клавишу q. В редакторе Vim, находясь в Normal mode, мы нажимаем клавишу :, чтобы перейти в Command mode.

Рисунок 43: тест

Тестовые задания

Мы обращаемся к каталогу /var/log/, так как он является стандартным местом хранения логов системы и приложений. Мы используем эту команду, чтобы отфильтровать и просмотреть все записи журнала systemd, относящиеся к службе sshd, начиная с начала текущих суток. Чтобы увидеть ограниченное количество последних записей, мы используем ключ -n. Команда journalctl -n 20 выведет последние 20 строк журнала.

Рисунок 44: тест

Тестовые задания

Для наблюдения за растущим лог-файлом в реальном времени мы используем команду tail с ключом -f. Мы знаем, что индивидуальные задания планировщика cron для каждого пользователя хранятся в виде файлов в каталоге /var/spool/cron/

Рисунок 45: тест

Тестовые задания

В записи cron мы используем символ звездочки * для обозначения “каждого” допустимого значения в поле (например, каждую минуту, каждый час). Чтобы полностью очистить нашу личную таблицу cron, мы выполняем команду crontab -r.

Рисунок 46: тест

Тестовые задания

При создании пользователя мы используем ключ -m, чтобы система автоматически создала для него домашний каталог по умолчанию. Для полного удаления учетной записи пользователя и его домашнего каталога со всем содержимым мы применяем команду userdel с ключом -r

Рисунок 47: тест

Тестовые задания

Мы используем эту команду, чтобы предоставить пользователю admin права суперпользователя. Ключ -aG гарантирует, что пользователь будет добавлен в группу sudo, а не будет перемещен туда, потеряв все другие групповые членства. Для редактирования критичных системных файлов /etc/passwd и /etc/shadow мы используем специальную утилиту vipw. Она блокирует файл на время редактирования, предотвращая его одновременное изменение из другого места, что обеспечивает целостность данных.

Рисунок 48: тест

Тестовые задания

Первый символ в выводе ls -l указывает на тип файла. Буква d означает, что это каталог. Мы используем команду chown в формате “chown владелец:группа файл” для одновременного изменения владельца и группы файла. Мы расшифровываем числовой формат прав так: 7 (владелец: rwx), 5 (группа: r-x), 4 (остальные: r–). Это соответствует строке rwxr-xr–.

Рисунок 49: тест

Тестовые задания

Все команды, выполненные через sudo, записываются в системный журнал, что позволяет нам отслеживать, кто, когда и что делал с привилегиями root. После изменения порта SSH демон будет работать на новом порту, но межсетевой экран по умолчанию блокирует все входящие соединения, кроме разрешенных правилами.

Рисунок 50: тест

Тестовые задания

Чтобы разрешить входящие подключения к нестандартному порту SSH, мы добавляем в UFW правило, явно указывающее номер порта и протокол: sudo ufw allow 47022/tcp. Мы предпочитаем sudo, потому что он позволяет предоставлять привилегированный доступ без разглашения пароля root, обеспечивает детальное логирование действий и дает более гибкое управление правами через файл /etc/sudoers.

Рисунок 51: тест

Тестовые задания

Мы понимаем, что хеширование — это односторонняя криптографическая функция. Идентификатор алгоритма хеширования, такой как \(6\) (SHA-512) или \(y\) (yescrypt), указывает системе, какой метод использовался для создания этого хеша. Мы добавляем “соль” — случайную строку — к паролю перед хешированием. Это гарантирует, что даже одинаковые пароли будут иметь разные хеши.

Рисунок 52: тест

Тестовые задания

Чтобы проверить настройки политики паролей, мы используем команду chage с ключом -l. Команда usermod -L блокирует учетную запись пользователя, добавляя знак ! в начало его хешированного пароля в /etc/shadow, что делает невозможным вход в систему с этим паролем.

Рисунок 53: тест

Тестовые задания

Для просмотра подробного списка файлов, включая их права доступа, владельца и группу, мы используем команду ls -l. Комбинация флагов -l и -a в команде ls позволяет нам увидеть права доступа у всех файлов, включая скрытые. Мы переводим символьные права в числовые: r (read) = 4, w (write) = 2, - (no execute) = 0. Суммируем: 4 + 2 + 0 = 6.

Рисунок 54: тест

Тестовые задания

Для изменения прав доступа мы используем команду chmod. В символьном режиме команды chmod мы используем операторы: + для добавления прав, - для отзыва прав и = для установки прав в точное значение. Чтобы рекурсивно применить изменения прав ко всем файлам и подкаталогам внутри директории, мы используем ключ -R.

Рисунок 55: тест

Тестовые задания

Мы устанавливаем Sticky Bit на общедоступные каталоги вроде /tmp, чтобы пользователи могли удалять только свои собственные файлы, даже если у них есть право на запись в каталог. SUID — это специальное право, которое заставляет исполняемый файл запускаться с правами его владельца, а не пользователя, который его запустил. Такого параметра не существует.

Рисунок 56: тест

Тестовые задания

Для получения подробного списка всех процессов в системе с информацией о пользователе, PID, использовании CPU и памяти мы используем команду ps aux. Когда процесс не реагирует на другие сигналы, мы используем команду kill -9, которая отправляет сигнал SIGKILL. Мы приостанавливаем процесс, работающий в терминале, нажатием Ctrl+Z. Затем, чтобы возобновить его выполнение в фоновом режиме, мы вводим команду bg %1.

Рисунок 57: тест

Тестовые задания

Значение nice определяет приоритет планировщика. Чем оно ниже, тем выше приоритет процесса. Таким образом, значение -20 является наивысшим приоритетом, а 19 — самым низким. Для изменения приоритета уже работающего процесса мы используем команду renice. В unit-файле systemd мы используем директиву Nice=, чтобы установить значение nice для всех процессов этого сервиса при их запуске.

Рисунок 58: тест

Тестовые задания

Для проверки состояния, активности и последних логов системного сервиса мы используем команду systemctl status имя_сервиса. В таймере systemd мы используем директиву OnCalendar= с параметром daily, чтобы настроить ежедневный запуск в полночь. Чтобы сервис автоматически запускался при загрузке системы, мы “включаем” его с помощью команды systemctl enable. Это создает необходимые символические ссылки.

Рисунок 59: тест

Тестовые задания

Мы используем директиву Restart=always в unit-файле systemd, когда нам нужно, чтобы сервис автоматически перезапускался независимо от того, как он завершился — штатно, с ошибкой или был принудительно остановлен. Это обеспечивает максимальную отказоустойчивость службы. Для мониторинга журнала конкретного сервиса в реальном времени мы используем команду journalctl -u servicename -f. Перед тем как запускать новый сервис, мы всегда проверяем его unit-файл на наличие синтаксических ошибок с помощью команды systemd-analyze verify.

Рисунок 60: тест

Оценки тестов

Оценка за тест

Рисунок 61: тест 1

Оценка за тест

Рисунок 62: тест 2

Оценка за тест

Рисунок 63: тест 3

Оценка за тест

Рисунок 64: тест 4

Оценка за тест

Рисунок 65: тест 5

Оценка за тест

Рисунок 66: тест 6

Оценка за тест

Рисунок 67: тест 7

Оценка за тест

Рисунок 68: тест 8

Оценка за тест

Рисунок 69: тест 9

Оценка за тест

Рисунок 70: тест 10

Оценка за тест

Рисунок 71: тест 11

Оценка за тест

Рисунок 72: тест 12

Оценка за тест

Рисунок 73: тест 13

Оценка за тест

Рисунок 74: тест 14

Оценка за тест

Рисунок 75: тест 15

Выводы

Выводы

Мы выполнили второй раздел внешнего курса “Системный администратор Linux с нуля”.

Список литературы

Список литературы

  1. https://study.selectel.ru/members/courses/course756726784647